package toOffer;

/**
 * <h3>leetcode</h3>
 *
 * @author BigFaceCat
 * @date 2024/1/27 9:41
 * @description <p>两数相加</p>
 */
public class No2 {
    public static void main(String[] args) {

    }

    /**
     * 思路：
     * 两个指针分别指向两个链表，让两个指针对应的节点里的数据相加，如果大于10、则只保留个位，在下一次相加的数的值上+1
     * 注意：别忘记如果l1和l2的最后一位相加，如果数量大于10，那么要有最后一位、它的值不是空
     *
     * @param l1
     * @param l2
     * @return
     */
    public static ListNode addTwoNumbers(ListNode l1, ListNode l2) {
        //判空
        if (l1 == null && l2 == null) {
            return null;
        }

        int count = 0;
        ListNode head = null;
        ListNode tail = null;
        while (l1 != null || l2 != null) {

            int value = (l1 == null ? 0 : l1.val) + (l2 == null ? 0 : l2.val) + count;
            if (head == null) {
                head = tail = new ListNode(value % 10);
            } else {
                tail.next = new ListNode(value % 10);
                tail = tail.next;
            }

            count = value / 10;

            l1 = l1 == null ? null : l1.next;
            l2 = l2 == null ? null : l2.next;

            if (count >= 1){
                tail.next = new ListNode(count);
            }
        }

        return head;
    }

    public static class ListNode {
        int val;
        ListNode next;

        ListNode() {
        }

        ListNode(int val) {
            this.val = val;
        }

        ListNode(int val, ListNode next) {
            this.val = val;
            this.next = next;
        }

//        public int getVal(){
//            return this.val;
//        }

    }
}
